#include "Int_led.h"

u16 ledgroup[3]={LED_1,LED_2,LED_3};

void led_init(void){
    //使能GPIOA时钟
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
    //PA1,PA2,PA8都设置成推挽输出模式
    GPIOA->CRL &= ~(GPIO_CRL_CNF1 | GPIO_CRL_CNF2);
    GPIOA->CRH &= ~(GPIO_CRH_CNF8);
    //PA1,PA2,PA8都设置成输出模式
    GPIOA->CRL |= GPIO_CRL_MODE1 | GPIO_CRL_MODE2;
    GPIOA->CRH |= GPIO_CRH_MODE8;
}

void led_on(u8 led){
    //低电平点亮led
    GPIOA->ODR &= ~led;
}
void led_off(u8 led){
    GPIOA->ODR |= led;
}
void led_toggle(u8 led){
    //如果led为高电平,则低电平点亮led
    if (GPIOA->IDR & led)
    {
        GPIOA->ODR &= ~led;
    }else{
        GPIOA->ODR |= led;
    }
}
void led_onAll(void){
    for (u8 i = 0; i < 3; i++){
        GPIOA->ODR &= ~ledgroup[i];
    }
}
void led_offAll(void){
    for (u8 i = 0; i < 3; i++){
        GPIOA->ODR |= ~ledgroup[i];
    }
}




/**
     *  MODE 00 输入模式 (复位状态)
     *  MODE 01,10,11 速度快,一般推挽选11吧
     *  由于是个按键开关,只需要读取电平变化,于是选输入
     *  输入:   00	模拟输入（Analog）	用于 ADC 采样，不施加上拉 / 下拉电阻。
                01	浮空输入（Floating）	无上拉 / 下拉，引脚电平由外部信号决定，易受干扰。
                10	上拉 / 下拉输入	内部连接上拉或下拉电阻，具体取决于ODR寄存器的值：
                        - ODR=1：上拉
                        - ODR=0：下拉
                11	保留	不使用。
        输出:
                00：通用推挽输出模式 
                01：通用开漏输出模式 
                10：复用功能推挽输出模式 
                11：复用功能开漏输出模式
        
     */
